#ifndef __COMMAND_H
#define __COMMAND_H

#include <stdbool.h>

#define MAX_CMD_ARG_LEN 256 ///< 命令参数最大长度

/**
 * @brief 命令类型枚举
 *
 */
typedef enum
{
    CMD_LOGIN,    ///< 登录
    CMD_SIGNUP,   ///< 注册
    CMD_QUIT,     ///< 退出
    CMD_LS,       ///< 列出文件列表
    CMD_LL,       ///< 列出详细文件列表
    CMD_CD,       ///< 切换当前目录
    CMD_PWD,      ///< 显示当前目录路径
    CMD_REMOVE,   ///< 删除文件或目录
    CMD_MV,       ///< 移动文件或目录
    CMD_MKDIR,    ///< 创建目录
    CMD_DOWNLOAD, ///< 下载文件
    CMD_UPLOAD,   ///< 上传文件
    CMD_INVALID,  ///< 无效命令
} CommandType_t;

/**
 * @brief 命令结构体
 *
 */
typedef struct
{
    CommandType_t type;         ///< 命令类型
    char name[10];              ///< 命令名称
    int client_fd;              ///< 客户端文件描述符
    char arg1[MAX_CMD_ARG_LEN]; ///< 参数1
    char arg2[MAX_CMD_ARG_LEN]; ///< 参数2
} Command_t;

/**
 * @brief 解析命令
 *
 * @param input 输入命令字符串
 * @return Command_t 解析后的命令
 */
Command_t parseCommand(const char *input);

/**
 * @brief 执行命令
 *
 * @param cmd 命令
 * @return int 执行结果
 *  @retval 0 成功
 *  @retval -1 失败
 */
bool isValidCommand(CommandType_t cmd_type);

#endif /* __COMMAND_H */
